#ifndef _BUILDING_H
#define _BUILDING_H

#include <iostream>

#include "geometry.h"
#include "shape.h"

// ================== BUILDING ================== //
class Building : public Quadrangle
{
	protected:
		int floor;

	public:
		Building(const Vector& a,const Vector& b,const Vector& c,const Vector& d) : Quadrangle(a, b, c, d) {}

		void RandFloor();
		void Subdivide();
		void Specialization();
		void Toiture(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
};

// =============== CLASSIC BUILD ================ //
class ClassicBuild : public Building
{
	public:
		ClassicBuild(const Vector& a,const Vector& b,const Vector& c,const Vector& d, const int f) : Building(a, b, c, d) { floor = f; }

		void GroundFloor();
		void FirstFront(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
		void SecondFront(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
		void FirstWindow(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
};

// =================== CHURCH =================== //
class Church : public Building
{	
	public:
		Church(const Vector& a,const Vector& b,const Vector& c,const Vector& d,const int f) : Building(a, b, c, d) { floor = f; }

		void GroundFloor();
		void FirstFront(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
		void SecondFront(const Vector& a,const Vector& b,const Vector& c,const Vector& d) { PrismQuad(a, b, c, d, 0.6).Render(); }
};

// =================== SCHOOL =================== //
class School : public Building
{	
	public:
		School(const Vector& a,const Vector& b,const Vector& c,const Vector& d,const int f) : Building(a, b, c, d) { floor = f; }

		void GroundFloor();
		void FirstFront(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
		void SecondFront(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
		void FirstWindow(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
};

// ================ GLASS BUILD ================= //
class GlassBuild : public Building
{
	public:
		GlassBuild(const Vector& a,const Vector& b,const Vector& c,const Vector& d,const int f) : Building(a, b, c, d) { floor = f; }

		void GroundFloor();
		void FirstFront(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
};

// =================== SQUARE =================== //
class Square : public Building
{
	public:
		Square(const Vector& a,const Vector& b,const Vector& c,const Vector& d) : Building(a, b, c, d) {}

		void Garden();
		void Place();
};

#endif // _BUILDING_H
